package tcc.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

public final class DBSingleton {

	// logar como root:
	// mysql -u root -p
	// senha: mysql

	// para criar um banco de dados faca:
	// create database promoweb CHARACTER SET utf8 COLLATE utf8_general_ci;

	// deletar banco
	// drop database promoweb;

	// Emma (ubuntu gui for view database)

	private static Connection conn = null;
	private static String url = "jdbc:mysql://localhost:3306/";
	private static String dbName = "promoweb?autoReconnect=true&useUnicode=true&characterEncoding=utf8";
	private static String driver = "com.mysql.jdbc.Driver";
	private static String userName = "root";
	private static String password = "mysql";

	// Instancia estática privada que será acessada
	private static final DBSingleton INSTANCE = new DBSingleton();

	// Construtor privado. Suprime o construtor público padrao.
	private DBSingleton() {
		try {
			Class.forName(driver);
			conn = DriverManager
					.getConnection(url + dbName, userName, password);
		} catch (Exception e) {
			System.out.println("Banco de dados não existe!");
			System.out.println("crie um banco de dados: \"promoweb\"");
		}
	}

	// Método público estático de acesso único ao objeto!
	public static synchronized Statement getStatement() throws SQLException {
		return INSTANCE.conn.createStatement();
	}

	@SuppressWarnings("static-access")
	public static synchronized PreparedStatement prepareStatement(String sql)
			throws SQLException {
		return INSTANCE.conn.prepareStatement(sql);
	}

	public static synchronized PreparedStatement prepareStatement(String sql,
			int autoGeneratedKeys) throws SQLException {
		return INSTANCE.conn.prepareStatement(sql, autoGeneratedKeys);
	}

}
